﻿/*
 Program analogiczny do	WR-Z-12		(03-IV-113)
	Program wymaga maszyny ODRA UMCS

 Program perforuje napisy w tzw. kodzie wizualnym:
 znaki kodu dalekopisowego nr 2 wprowadzane z dalekopisu
 tłumaczy na układy rządków na taśmie wychodzącej z perforatora 8-kanałowego tak,
 iż układ dziurek przypomina kształtem litery, cyfry i znaki przestankowe
 o zmiennej szerokości do 8 kwintetów, w układzie poziomym,
 zajmując jedynie 5 kanałów dziurek.
 Program pracuje na drugiej ścieżce ferrytowej i należy go startować od adresu 17400.
 Wzorce kształtów pasują również do programu 5Hz.
 Po zatrzymaniu się wystarczy wcisnąć [StartCPU] dla ponownego uruchomienia.
 Może być wywołany jako podprogram od adresu 17401 z adresem napisu w A w skali 21,
 kończącego się znakiem LF. Znak CR daje całkowicie zadziurkowane pole.
 Jeśli nie przełączono, to pierwszy znak jest z pocztu cyfr.

 Program jest zgodny z alfabetem dalekopisu TTY MKD-2 PL2.
*/


;Etyk:	Rozkaz			Komentarz
;=====	===================	================================
	:401 17400:		Adr. pocz. programu

PROGR	:032 czTTY prog1 60	B6 = czTTY;	funkcja czytania znaku

PODPR	:726 00000 podp2 00	Ślad - powrót do progr. głównego
poczt	:000 00000 00000 00	Poczet: 0=cyfry, 32=litery
podp2	:021 temp6   +   60	[temp6] = B6;
	:021 temp5   +   50	[temp5] = B5;
	:021 temp4   +   40	[temp4] = B4;
	:032 czTXT   +   60	B6 = czTXT;
	:402 00000   +   50	B5 = A;		adres napisu
	:002 00000   +   40	B4 = 0;		liczba znaków w A
	:746 funkc   +   00	SkS funkc;
	:012 temp4   +   40	B4 = [temp4];
	:012 temp5   +   50	B5 = [temp5];
	:012 temp6 PODPR 60	B6 = [temp6];	i Return

prog1	:050 kodFS   +   00	A = FS;
	:626 00000   +   00	Wy6 = FS;
	:746 funkc   +   00	SkS funkc;
	:726 00000 PROGR 00	Stop;

funkc	:726 00000 funk2 00	Ślad - powrót do PROGR/PODPR
gdyLS	:001 poczt 00000 61	[poczt] = 0;	Skocz do czTTY/czTXT; A = znak...
funk2	:021 temp3   +   30	[temp3] = B3;
gdyFS	:070 00040   +   00	A = 32;
	:401 poczt 00000 61	[poczt] = A;	Skocz do czTTY/czTXT; A = znak...
jZnak	:116 00021   +   00	A >>>= 17;	A = znak w skali 21
kodFS	:670 00037   +   00	A &= 31;
	:246   +   00000 61			gdy NU, pominąć	
	:330 00033   +   00	A - FS;
	:046 gdyFS   +   00			gdy FS, przełączyć na cyfry	
	:330 00037   +   00	A - LS;
	:046 gdyLS   +   00			gdy LS, przełączyć na litery
	:330 00002   +   00	A - LF;
	:046 gdyLF   +   00			gdy LF, koniec tekstu
	:412 poczt   +   30	B3 = A + [poczt];
	:050 wzory   +   31	A = [wzory+B3];
	:046   +   nRząd 00	SknZ nRząd;	gdy spacja,
	:566 00000   +   00	XWy5;		to dodatkowy pusty rządek
nRząd	:116 00003   +   00	A >>>= 3;
	:566 00000   +   00	XWy5;
	:016 00010   +   00	A <<<= 8;
	:046   +   nRząd 00	SknZ nRząd;
	:566 00000 00000 61	XWy5;		Skocz do czTTY/czTXT; A = znak...

gdyLF	:012 temp3 funkc 30	B3 = [temp3];	i Powrót po śladzie

czTTY	:126 00000   +   00	We1; A = znak z dalekopisu
	:016 00042 jZnak 00	A <<<= 34;	i do jZnak

czTXT	:546   +   slowo 40	SkLC B4--;	czy są jeszcze znaki w słowie
	:050 znaki   +   00	A = [znaki];	są
	:016 00005 schow 00	A <<<= 5;	i do schowka
slowo	:050 00000   +   51	A = [B5];	słowo ze znakami tekstu
	:646   +     +   50	SkLC B5++;	wskaźnik na nast. słowo
	:032 00006   +   40	B4 = 6;		licznik znaków w słowie
schow	:401 znaki jZnak 00	[znaki] = A;	i do jZnak

znaki	:000 00000 00000 00	znaki słowa, drukowany i pozostałe
temp3	:000 00000 00000 00	B3 - roboczy
temp4	:000 00000 00000 00	B4 - licznik znaków w słowie
temp5	:000 00000 00000 00	B5 = adres kolejnego słowa tekstu
temp6	:000 00000 00000 00	B6 = funkcja pobierania znaku

wzory	:357 17775 14000 00	wzór ●
	:772 15326 02000 00	wzór E
	:532 15326 12000 00	wzór ≡
	:742 11227 14000 00	wzór A
	:000 00000 00000 00	wzór  
	:452 15325 02000 00	wzór S
	:437 14200 00000 00	wzór I
	:370 04101 16000 00	wzór U
	:777 17777 17777 00	wzór ⌂
	:770 14305 14000 00	wzór D
	:762 13326 04000 00	wzór R
	:210 14305 16000 00	wzór J
	:761 01043 16000 00	wzór N
	:762 11224 02000 00	wzór F
	:350 14305 04000 00	wzór C
	:762 01052 02000 00	wzór K
	:020 17604 02000 00	wzór T
	:434 15316 02000 00	wzór Z
	:770 04102 00000 00	wzór L
	:764 01043 16000 00	wzór W
	:762 01023 16000 00	wzór H
	:021 07010 02000 00	wzór Y
	:762 11224 04000 00	wzór P
	:350 14347 14000 00	wzór Q
	:350 14305 14000 00	wzór O
	:772 15325 04000 00	wzór B
	:350 15327 12000 00	wzór G
	:206 03461 00000 00	wzór ▲
	:761 01013 16000 00	wzór M
	:425 01052 02000 00	wzór X
	:066 04060 06000 00	wzór V
	:043 03430 04000 00	wzór ▼
	:357 17775 14000 00	wzór ●
	:430 15325 04000 00	wzór 3
	:532 15326 12000 00	wzór ≡
	:102 01020 10000 00	wzór -
	:000 00000 00000 00	wzór  
	:040 10000 00000 00	wzór '
	:252 15325 04000 00	wzór 8
	:034 11214 02000 00	wzór 7
	:777 17777 17777 00	wzór ⌂
	:242 03421 04000 00	wzór *
	:162 01023 16000 00	wzór 4
	:405 00000 00000 00	wzór ;
	:404 00000 00000 00	wzór ,
	:560 00000 00000 00	wzór !
	:240 00000 00000 00	wzór :
	:350 10000 00000 00	wzór (
	:572 15325 02000 00	wzór 5
	:102 07620 10000 00	wzór +
	:427 00000 00000 00	wzór )
	:454 15326 04000 00	wzór 2
	:772 04502 00000 00	wzór Ł
	:352 15325 00000 00	wzór 6
	:350 15305 14000 00	wzór 0
	:457 14000 00000 00	wzór 1
	:052 15325 14000 00	wzór 9
	:040 15224 04000 00	wzór ?
	:213 15646 10000 00	wzór &
	:206 03461 00000 00	wzór ▲
	:400 00000 00000 00	wzór .
	:404 01010 02000 00	wzór /
	:245 02451 04000 00	wzór =
	:043 03430 04000 00	wzór ▼


/*

 ●●●	●●●●	 ●●●	●●●●	●●●●●	●●●●●	 ●●●●	●   ●	 ●●●	 ●●●●	●   ●	●	●   ●	●   ●	 ●●●	●●●●	 ●●●	●●●●	 ●●●●	●●●●●	●   ●	●   ●	●   ●	●   ●	●   ●	●●●●●
●   ●	●   ●	●   ●	●   ●	●	●	●	●   ●	  ●	    ●	●  ●	●	●● ●●	●●  ●	●   ●	●   ●	●   ●	●   ●	●	  ●	●   ●	●   ●	●   ●	 ● ●	 ● ●	   ●
●●●●●	●●●●	●	●   ●	●●●●	●●●●	● ●●●	●●●●●	  ●	    ●	●●●	●	● ● ●	● ● ●	●   ●	●●●●	●   ●	●●●●	 ●●●	  ●	●   ●	 ● ●	● ● ●	  ●	  ●	  ●
●   ●	●   ●	●   ●	●   ●	●	●	●   ●	●   ●	  ●	●   ●	●  ●	●	●   ●	●  ●●	●   ●	●	●  ●●	● ●	    ●	  ●	●   ●	 ● ●	●● ●●	 ● ●	  ●	 ●
●   ●	●●●●	 ●●●	●●●●	●●●●●	●	 ●●●●	●   ●	 ●●●	 ●●●	●   ●	●●●●●	●   ●	●   ●	 ●●●	●	 ●●●●	●  ●●	●●●●	  ●	 ●●●	  ●	●   ●	●   ●	  ●	●●●●●	CR



●●●●		  ●	 ●●●	●●●●●		●   ●			  ●		   ●	●●●●●	  ●	 ●	 ●●●	●	 ●●●	 ●●●	  ●	 ●●●	 ●●●	 ●● 		    ●		●●●●●●●
    ●		 ●	●   ●	   ●	● ● ●	●   ●	  ●		  ●	  ●	  ●	●	  ●	  ●	●   ●	● ●	●	●   ●	 ●●	●   ●	●   ●	 ●●		   ●	●●●●●	●●●●●●●
  ●●	●●●●●		 ●●●	  ●	 ●●●	●●●●●			  ●		  ●	●●●●	●●●●●	  ●	  ●●	●●	●●●●	● ● ●	  ●	 ●●●●	  ●●	 ●● ●		  ●		●●●●●●●
    ●			●   ●	 ●	● ● ●	    ●	  ●	  ●		  ●	  ●	    ●	  ●	  ●	 ●	●	●   ●	●   ●	  ●	    ●		●  ●	  	 ●	●●●●●	●●●●●●●
●●●●			 ●●●	 ●		    ●	 ●	 ●	  ●		   ●	●●●●	  ●	 ●	●●●●●	●●●●●	 ●●●	 ●●●	 ●●●	 ●●●	  ●	 ●● ●	  ●	●		●●●●●●●


{let instr = '';
	rz(14,31,31,31,14, 0, 0,'●');
	rz(31,21,21,21,17, 0, 0,'E');
	rz(21,21,21,21,21, 0, 0,'≡');
	rz(30, 5, 5, 5,30, 0, 0,'A');
	rz( 0, 0, 0, 0, 0, 0, 0,' ');
	rz(18,21,21,21, 9, 0, 0,'S');
	rz(17,31,17, 0, 0, 0, 0,'I');
	rz(15,16,16,16,15, 0, 0,'U');
	rz(31,31,31,31,31,31,31,'⌂');
	rz(31,17,17,17,14, 0, 0,'D');
	rz(31, 5,13,21,18, 0, 0,'R');
	rz( 8,17,17,17,15, 0, 0,'J');
	rz(31, 2, 4, 8,31, 0, 0,'N');
	rz(31, 5, 5, 5, 1, 0, 0,'F');
	rz(14,17,17,17,10, 0, 0,'C');
	rz(31, 4, 4,10,17, 0, 0,'K');
	rz( 1, 1,31, 1, 1, 0, 0,'T');
	rz(17,25,21,19,17, 0, 0,'Z');
	rz(31,16,16,16,16, 0, 0,'L');
	rz(31, 8, 4, 8,31, 0, 0,'W');
	rz(31, 4, 4, 4,31, 0, 0,'H');
	rz( 1, 2,28, 2, 1, 0, 0,'Y');
	rz(31, 5, 5, 5, 2, 0, 0,'P');
	rz(14,17,17,25,30, 0, 0,'Q');
	rz(14,17,17,17,14, 0, 0,'O');
	rz(31,21,21,21,10, 0, 0,'B');
	rz(14,17,21,21,29, 0, 0,'G');
	rz( 8,12,14,12, 8, 0, 0,'▲');
	rz(31, 2, 4, 2,31, 0, 0,'M');
	rz(17,10, 4,10,17, 0, 0,'X');
	rz( 3,12,16,12, 3, 0, 0,'V');
	rz( 2, 6,14, 6, 2, 0, 0,'▼');
	rz(14,31,31,31,14, 0, 0,'●');
	rz(17,17,21,21,10, 0, 0,'3');
	rz(21,21,21,21,21, 0, 0,'≡');
	rz( 4, 4, 4, 4, 4, 0, 0,'-');
	rz( 0, 0, 0, 0, 0, 0, 0,' ');
	rz( 2, 1, 0, 0, 0, 0, 0,"'");
	rz(10,21,21,21,10, 0, 0,'8');
	rz( 1,25, 5, 3, 1, 0, 0,'7');
	rz(31,31,31,31,31,31,31,'⌂');
	rz(10, 4,14, 4,10, 0, 0,'*');
	rz( 7, 4, 4, 4,31, 0, 0,'4');
	rz(16,10, 0, 0, 0, 0, 0,';');
	rz(16, 8, 0, 0, 0, 0, 0,',');
	rz(23, 0, 0, 0, 0, 0, 0,'!');
	rz(10, 0, 0, 0, 0, 0, 0,':');
	rz(14,17, 0, 0, 0, 0, 0,'(');
	rz(23,21,21,21, 9, 0, 0,'5');
	rz( 4, 4,31, 4, 4, 0, 0,'+');
	rz(17,14, 0, 0, 0, 0, 0,')');
	rz(18,25,21,21,18, 0, 0,'2');
	rz(31,20,18,16,16, 0, 0,'Ł');
	rz(14,21,21,21, 8, 0, 0,'6');
	rz(14,17,21,17,14, 0, 0,'0');
	rz(18,31,16, 0, 0, 0, 0,'1');
	rz( 2,21,21,21,14, 0, 0,'9');
	rz( 2, 1,21, 5, 2, 0, 0,'?');
	rz( 8,23,23, 9,20, 0, 0,'&');
	rz( 8,12,14,12, 8, 0, 0,'▲');
	rz(16, 0, 0, 0, 0, 0, 0,'.');
	rz(16, 8, 4, 2, 1, 0, 0,'/');
	rz(10,10,10,10,10, 0, 0,'=');
	rz( 2, 6,14, 6, 2, 0, 0,'▼');

function rz(a,b,c,d,e,f,g,znak) {
 let	n = ((((((a*32+b)*32+c)*32+d)*32+e)*32+f)*32+g)*16;
 let	tpg= Math.floor(n / 0o10000000000),
	ar = (n >> 17) & 0o17777,
	nr = (n >>  4) & 0o17777,
	bm = (n >>  1) & 7,
	bz = n & 1;
 instr += '\t:' + (tpg+1024).toString(8).substr(1) +' '+ (ar+32768).toString(8).substr(1) +' '+ (nr+32768).toString(8).substr(1) +' '+ bm.toString(8) + bz + '\twzór ' + znak + '\n';
}
console.log(instr);
}

*/
